pub mod html_t {
    use yew::prelude::*;
    pub struct HtmlMyComponent;

    // show for not properties
    impl Component for HtmlMyComponent {
        type Message = ();
        type Properties = ();

        fn create(_ctx: &Context<Self>) -> Self {
            Self
        }

        fn view(&self, _ctx: &Context<Self>) -> Html {
            html! {
                {"no properties"}
            }
        }
    }

    #[derive(Clone, PartialEq, Properties)]
    pub struct HtmlProps {
        pub prop1: String,
        pub prop2: String,
    }

    pub struct MyComponentWithProps;

    // show for two properties
    impl Component for MyComponentWithProps {
        type Message = ();
        type Properties = HtmlProps;

        fn create(_ctx: &Context<Self>) -> Self {
            Self
        }

        fn view(&self, ctx: &Context<Self>) -> Html {
            html! {
                {
                    format!("prop1: {} and prop2: {}", ctx.props().prop1, ctx.props().prop2)
                }
            }
        }
    }

    #[derive(Clone, PartialEq, Properties)]
    pub struct HtmlChildrenProps {
        pub id: String,
        pub children: Children,
    }

    pub struct HtmlChildren;

    // past one is id: String
    // another is a Children Component
    impl Component for HtmlChildren {
        type Message = ();
        type Properties = HtmlChildrenProps;
        fn create(_ctx: &Context<Self>) -> Self {
            Self
        }

        fn view(&self, ctx: &Context<Self>) -> Html {
            html! {
                <div id={ctx.props().id.clone()}>
                    {ctx.props().children.clone()}
                </div>
            }
        }
    }
}